const path = require('path');
const os = require('os');
const CompressionWebpackPlugin = require('compression-webpack-plugin');
const { httpProxy, publicPath } = require('./src/config');

// 是否Gzip压缩配置
var useGzip = true;

module.exports = {
	publicPath,
	outputDir: 'dist', // 输出文件目录
	lintOnSave: false, // eslint-loader 是否在保存的时候检查
	// see https://github.com/vuejs/vue-cli/blob/dev/docs/webpack.md
	// webpack配置
	chainWebpack: (config) => {
		config.module
			.rule('images')
			.test(/\.(png|jpe?g|gif|webp)(\?.*)?$/)
			.use('url-loader')
			.loader('file-loader')
			.options({
				publicPath, // 静态资源打包至非根目录时匹配publicPath
				name: 'img/[name].[hash:8].[ext]',
			});
		// 使用cache命中缓存
		config.module
			.rule('js')
			.use('cache-loader')
			.loader('cache-loader')
	},
	configureWebpack: (config) => {

		Object.assign(config, {
			// 开发生产共同配置  别名配置
			resolve: {
				alias: {
					'@': path.resolve(__dirname, './src'),
					'@s': path.resolve(__dirname,'./src/api'),
					'@c': path.resolve(__dirname, './src/components'),
					'@v': path.resolve(__dirname, './src/views'),
				},
			},
		});

		// Gzip
		if (useGzip == true && process.env.NODE_ENV == 'production') {
			config.plugins.push(
				new CompressionWebpackPlugin({
					filename: '[path].gz[query]',
					algorithm: 'gzip',
					test: new RegExp('\\.(' + ['js', 'css'].join('|') + ')$'),
					threshold: 10240,
					minRatio: 0.8,
				})
			);
		}
	},
	productionSourceMap: false, // 生产环境是否生成 sourceMap 文件
	// css相关配置
	css: {
		extract: process.env.NODE_ENV == 'production', // 是否使用css分离插件 ExtractTextPlugin
		sourceMap: false, // 开启 CSS source maps?
		requireModuleExtension: true, // 启用 CSS modules for all css / pre-processor files.
	},
	parallel: os.cpus().length > 1, // 是否为 Babel 或 TypeScript 使用 thread-loader。该选项在系统的 CPU 有多于一个内核时自动启用，仅作用于生产构建。
	// webpack-dev-server 相关配置
	devServer: {
		open: process.env.VUE_APP_ENV==='local',
		host: '0.0.0.0', // 允许外部ip访问
		port: 8023, // 端口
		https: false, // 启用https
		overlay: {
			warnings: true,
			errors: true,
		}, // 错误、警告在页面弹出
		hot: true,
		// 本地代理
		proxy: {
			'/api': {
				target: 'http://120.24.89.102:8081',
				changeOrigin: true,
				pathRewrite: {
					'^/api': '/api',
				}
			},
			// '/api': {
			// 	target: 'http://localhost:8081',
			// 	changeOrigin: true,
			// 	pathRewrite: {
			// 		'^/api': '/api',
			// 	}
			// },
		},
	},
	// 第三方插件配置
	pluginOptions: {},
};
